package com.ruoyi.datastatistics.mapper;

import com.ruoyi.datastatistics.domain.recvdata.RecvData;
import com.ruoyi.datastatistics.domain.recvdata.RecvDataDb;
import com.ruoyi.datastatistics.domain.recvdata.RecvDataXb;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 保存接收数据
 *
 * @author TsingYu
 * @version 1.0
 * @date 2025/2/18 15:54
 */
public interface RecvDataMapper {


    /**
     * 把接收到的数据存入中间库
     *
     * @param recvData 接收到的数据
     * @return 影响行数
     */
    int insertRecvData(@Param("recvData") RecvData recvData);

    /**
     * 把接收到的户表数据存入中间库
     *
     * @param recvDataXb 接收到的户表数据
     * @return 影响行数
     */
    int batchInsertOrUpdateRecvDataXb(@Param("recvDataXb") RecvDataXb recvDataXb);

    int batchInsertOrUpdateXbDataList(@Param("xbDataList") List<RecvDataXb.XbData> xbDataList);
    int batchInsertOrUpdateXbDataListFull(@Param("xbDataList") List<RecvDataXb.XbData> xbDataList);
    int batchInsertOrUpdateXbDataListFullNew(@Param("xbDataList") List<RecvDataXb.XbData> xbDataList);

    /**
     * 把接收到的大表数据存入中间库
     *
     * @param recvDataDb 接收到的大表数据
     * @return 影响行数
     */
    int batchInsertOrUpdateRecvDataDb(@Param("recvDataDb") RecvDataDb recvDataDb);

    /**
     * 查找中间库所有未同步的数据
     *
     * @return 所有未同步的数据
     */
    List<RecvDataXb.XbData> selectRecvXbData();

    /**
     * 查找中间库所有未同步的大表数据
     *
     * @return 所有未同步的数据
     */
    List<RecvDataDb.DbData> selectRecvDbData();

    /**
     * 批量更新同步状态
     *
     * @param tableName  修改的表名
     * @param syncStatus 同步状态，1未同步、2已同步、3同步失败
     * @param ids        主键
     * @return 影响行数
     */
    int updateSyncStatusByIds(@Param("tableName") String tableName, @Param("syncStatus") String syncStatus, @Param("ids") List<Long> ids);

    /**
     * 定时清理数据
     *
     * @return 影响行数
     */
    int deleteRecvData();
}
